package com.wzq.permission.client.service;

import java.util.List;
import java.util.Map;

import com.wzq.permission.client.model.Pager;
import com.wzq.permission.client.model.admin.ApplicationUserModel;
import com.wzq.permission.client.model.admin.RoleModel;
import com.wzq.permission.client.model.admin.UserModel;
import com.wzq.permission.client.model.admin.UserRoleModel;

public interface UserService {
	void add(UserModel user);

	void update(UserModel user);

	void updateBySelective(UserModel user);

	void delete(Object id);

	int queryByCount(UserModel user);

	List<UserModel> queryList(UserModel user,Pager pager);

	UserModel queryById(Object id);
	
	//===========================华丽的分隔线============================================================================================

	UserModel login(UserModel user,String appKey);
	
	int logicDelete(Long[] userIds);
	
	/**
	 * 分配系统
	 * @param userId 用户ID
	 * @param applicationUserModelList 系统用户模型列表
	 */
	void allotApplication(Long userId,List<ApplicationUserModel> applicationUserModelList);
	
	/**
	 * 根据用户ID查询用户系统信息
	 * @param userId
	 * @return
	 */
	List<ApplicationUserModel> queryUserApplication(Long userId);
	
	/**
	 * 分配角色
	 * @param userId 用户ID
	 * @param applicationId 系统ID
	 * @param userRoleModelList 用户角色模型列表
	 */
	void allotRole(Long userId,Long applicationId,List<UserRoleModel> userRoleModelList);
	
	/**
	 * 根据用户ID查询用户角色列表信息
	 * @param userId 用户ID
	 * @param applicationId 系统ID
	 * @return List<UserRoleModel>
	 */
	List<UserRoleModel> queryUserRole(Long userId,Long applicationId);
	
	/**
	 * 判断用户名是否存在
	 * @param userName 用户名
	 * @return int
	 */
	int isExitUserName(String userName);
	
	/**
     * 
     * 根据用户ID查询用户数据权限   
     * @author 陈剑飞    
     * @Title: queryDataPermissionByUserId    
     * @param userId 用户ID
     * @param applicationId 系统ID
     * @Return: List<Map<String,Object>> 
     * 返回值 
     * rangeType 权限范围  2 省;3 市 ; 4 县区;5 小区
     * dataValueList 数据权限值，字符数组list
     */
    List<Map> queryDataPermissionByUserId(Long userId,String applicationId);
    
    /**
     * 根据用户ID查询用户的角色列表
     * @author 陈剑飞    
     * @Title: getRoleByUserId    
     * @param userId 用户ID
     * @param applicationId 角色ID
     * @Return: List<RoleModel> 返回值
     */
    List<RoleModel> getRoleByUserId(Long userId,String applicationId);
    
    /**
     * 记录退出登录日志
     * @fileName UserService.java	
     * @author liuzaoyong
     * @date 2016年5月18日下午2:31:43
     * @param UserModel
     * @param appKey
     * @return void
     */
    void loginOut(UserModel user,String appKey);
}
